#include <iostream>
#include <vector>

using namespace std;

/*
    迭代器分类：
      读写迭代器: 迭代器既可以访问容器元素,也可以修改容器元素
                 begin() end()
      只读迭代器: 只能访问容器元素,不能修改容器元素
                 cbegin() cend()
      逆迭代器 （方向迭代器）: 从后往前访问容器元素
                 rbegin() rend()
      只读逆迭代器: 只能访问容器元素,不能修改容器元素
                 crbegin() crend()
*/

int main()
{
    int i;
    vector<int> v1;

    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);

    // 读写迭代器
    vector<int>::iterator it = v1.begin();
    for (; it != v1.end(); it++) // 迭代器行为类似指针
    {

        cout << *it << " ";
        *it += 1;
    }
    cout << endl;

    // 只读迭代器   const_iterator
    vector<int>::const_iterator it2 = v1.cbegin();
    for (; it2 != v1.cend(); it2++)
    {
        cout << *it2 << " ";
    }
    cout << endl;

    // 逆迭代器
    vector<int>::reverse_iterator it3 = v1.rbegin();
    for (; it3 != v1.rend(); it3++)
    {
        cout << *it3 << " ";
        *it3 += 1;
    }
    cout << endl;

    // 只读逆迭代器
    vector<int>::const_reverse_iterator it4 = v1.crbegin();
    for (; it4 != v1.crend(); it4++)
    {
        cout << *it4 << " ";
    }
    cout << endl;

    return 0;
}